package com.snbc.Io;

import java.io.*;
/**
 * @Classname FileOutPutStreamDemo3
 * @Description TODO
 * @Date 2019/9/26 19:56
 * @Created by Acer
 */
public class FileOutPutStreamDemo3 {
    /**
     * 练习-拆分文件
     * 找到一个大于100k的文件，按照100k为单位，拆分成多个子文件，并且以编号作为文件名结束。
     * 比如文件 eclipse.exe，大小是309k。
     * 拆分之后，成为
     * eclipse.exe-0
     * eclipse.exe-1
     * eclipse.exe-2
     * eclipse.exe-3
     */
    public static void main(String[] args) {
//        try {
//            File file = new File("F:\\sougou\\SogouInput\\SogouExe\\SogouExe.exe");
//            if (file.length() > 100 * 1024) {
//                System.out.println("文件大小为：" + (file.length() / 1024) + "k");
//            } else {
//                System.out.println("该文件大小不足100k");
//            }
//            // 创建基于文件的输入流
//            FileInputStream fis = new FileInputStream(file);
//            byte[] data = new byte[1024 * 100];
//            int flag = 1;
//            int len = -1;
//            // 创建基于文件的输出流
//            FileOutputStream fos = null;
//            while ((len = fis.read(data)) != -1) {//是否读取完整个文件或者是否读取完最后一个字符，返回的是boolean。-1表示读到最后了。
//                File f2 = new File("F:\\sougou\\SogouInput\\SogouExe" + flag);
//                fos = new FileOutputStream(f2);
//                fos.write(data, 0, len);//将byte数组中从偏移量 off 开始的 len 个字节写入此文件输出流
//                System.out.println("F:\\sougou\\SogouInput\\SogouExe" + flag + "，其大小是" + f2.length() + "字节");
//                flag++;
//            }
//            fos.close();
//            fis.close();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }


/*        try {
            File file1 = new File("F:\\sougou\\SogouInput\\SogouExe\\SogouExe.exe");
            FileInputStream fis1 = new FileInputStream(file1);
            byte[] data1 = new byte[1024 * 100];
            int len1 = -1;
            int num = 1;
            FileOutputStream fos2 = null;
            while ((len1 = fis1.read(data1)) != -1) {
                File file2 = new File("aaa" + num);
                fos2 = new FileOutputStream(file2);
                fos2.write(data1, 0, len1);
                System.out.println(file2.getName() + file2.length() + "K");
                num++;
            }
            fos2.close();
            fis1.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }*/

        /*
         * 把上述拆分出来的文件，合并成一个原文件。
         * 以是否能正常运行，验证合并是否正确
         */
        File file3 = null;
        File file4 = new File("F:\\sougou\\SogouInput\\bb.exe");
        FileInputStream fis2 = null;

        //创建文件输出流对象
        try {
            FileOutputStream fos2 = new FileOutputStream(file4, true);   //第二个参数表示追加写入
            //读写数据
            for (int i = 1; i < 5; i++) {
                //写的顺序是0，1，2，3，4   那么读的顺序应该也是0，1，2，3，4
                file3 = new File("F:\\sougou\\SogouInput\\SogouExe" + i);
                fis2 = new FileInputStream(file3);
                byte[] bys = new byte[(int) file3.length()];   //根据每个文件大小创建字节数组
                while (fis2.read(bys) != -1) {
                    fos2.write(bys);
                }
            }
            //释放资源
            fis2.close();
            fos2.close();
            System.out.println(file4.getName() + "" + file4.length() + "k");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}